package com.ys.service.sys.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;

import com.bo.enume.sys.StatusEnum;
import com.ys.entity.sys.SysDict;
import com.ys.mapper.sys.SysDictMapper;
import com.ys.service.sys.SysDictService;
import com.ys.vo.R;
import com.ys.vo.W;

@Service("sysDictService")
public class SysDictServiceImpl implements SysDictService {

	@Autowired
	private SysDictMapper sysDictMapper;

	@Override
	public R addSysDict(String dictKey, String dictValue, String dictName) {
		
		if (dictKey == null || dictKey.length() == 0) {
			return R.error("字典编码不能为空");
		}
		
		if (dictValue == null || dictValue.length() == 0) {
			return R.error("字典值不能为空");
		}
		
		if (dictName == null || dictName.length() == 0) {
			return R.error("字典名称不能为空");
		}
		
		// 验证字典唯一性
		if (new SysDict().setDictKey(dictKey).setDictValue(dictValue).count() > 0) {
			return R.error("该字典已存在，不能重复添加");
		}
		
		SysDict sysDict = SysDict.sysDict(dictKey, dictValue, dictName, StatusEnum.ON_USED.value);
		sysDictMapper.insert(sysDict);
		
		return R.ok("操作成功");
	}

	@Override
	public R editSysDict(Long id, String dictKey, String dictValue, String dictName) {
		
		if (id == null) {
			return R.error("ID不能为空");
		}
		
		if (dictKey == null || dictKey.length() == 0) {
			return R.error("字典编码不能为空");
		}
		
		if (dictValue == null || dictValue.length() == 0) {
			return R.error("字典值不能为空");
		}
		
		if (dictName == null || dictName.length() == 0) {
			return R.error("字典名称不能为空");
		}
		
		// 验证字典唯一性
		if (new SysDict().setDictKey(dictKey).setDictValue(dictValue).where("A.id != " + id).count() > 0) {
			return R.error("该字典已存在，不能重复添加");
		}
		
		SysDict sysDict = new SysDict().setId(id).queryFirst();
		if (sysDict == null) {
			return R.error("数据不存在");
		}
		
		sysDict.setDictKey(dictKey)
			.setDictValue(dictValue)
			.setDictName(dictName);
		sysDictMapper.update(sysDict);
		
		return R.ok("操作成功");
	}

	@Override
	@Transactional
	public R deleteTrue(Long id) {
		if (id == null) {
			return R.error("ID不能为空");
		}
		
		// 删除字段
		sysDictMapper.deleteTrue(id);
		
		return R.ok();
	}

	@Override
	public String toAddSysDict(Model model) {
		
		return "sys/sysDict/toAddSysDict";
	}

	@Override
	public String toEditSysDict(Model model, Long id) {
		if (id == null) {
			return W.error(model, "ID不能为空");
		}
		
		SysDict entity = new SysDict().setId(id).queryFirst();
		
		String dictKey = entity.getDictKey();
		String dictValue = entity.getDictValue();
		String dictName = entity.getDictName();
		
		ToEditSysDictDto dto = new ToEditSysDictDto(id, dictKey, dictValue, dictName);
		model.addAttribute("dto", dto);
		return "sys/sysDict/toEditSysDict";
	}
}
